package com.util;

import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

/**
 * Created by wlc on 2018/1/17.
 */
public class StrUtil {
    public static String getNullEmptyString(String[] temp, int index) {
        ArrayList<String> values = new ArrayList<>();
        for (int i = 0; i < temp.length; i++) {
            if (temp[i] != null && temp[i].length() > 0) {
                values.add(temp[i]);
            }
        }
        if (index >= 0) {
            return values.get(index);
        } else {
            return values.get(values.size() + index);
        }
    }

    public static ArrayList<String> getNullEmptyStringArray(String[] temp) {
        ArrayList<String> values = new ArrayList<>();
        for (int i = 0; i < temp.length; i++) {
            if (temp[i] != null && temp[i].length() > 0) {
                values.add(temp[i]);
            }
        }
        return values;
    }

    /**
     * 将分子式分成原子与原子数对应字符串（分子式后面的括号删除）
     * @param temp
     * @return
     */
    public static String splitElementAndNum(String temp) {
        //删除括号内容
        temp = temp.replaceAll("\\((.*?)\\)","");

        ArrayList<String> split_str = new ArrayList<String>(Arrays.asList(temp.split("")));
        boolean split_sign = true;
        int num_begin = 0;
        for (int i = 0; i < split_str.size(); i++) {
            if (Character.isDigit(split_str.get(i).charAt(0))) {
                if (split_sign) {
                    num_begin = i;
                    split_sign = false;
                } else {
                    split_str.add(num_begin, split_str.get(num_begin) + split_str.get(i));
                    split_str.remove(i);
                    split_str.remove(i);
                    i--;
                }
            } else {
                split_sign = true;
                if ((i != split_str.size() - 1) && Character.isUpperCase(split_str.get(i).charAt(0)) && Character.isLowerCase(split_str.get(i+1).charAt(0))) {
                    split_str.add(i, split_str.get(i) + split_str.get(i + 1));
                    split_str.remove(i + 1);
                    split_str.remove(i + 1);
                }
            }
        }
        return StringUtils.join(split_str, ",");
    }

    /**
     * 判断一个字符串是否为数字，不能判断负数
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断字符串是否为空
     * @param str
     * @return
     */
    public static boolean isEmpty(String str){
        return str == null || str.length() == 0;
    }

    /**
     * wordCount
     * @param strArr
     * @return
     */
    public static HashMap<String,Integer> wordCount(String[] strArr){
        HashMap<String,Integer> wordCount = new HashMap<>();
        for (int i=0;i<strArr.length;i++){
            if (wordCount.containsKey(strArr[i])){
                wordCount.put(strArr[i],wordCount.get(strArr[i])+1);
            }else {
                wordCount.put(strArr[i],1);
            }
        }
        return wordCount;
    }
}
